package com.webermagem.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="TB_PACIENTE")
public class Paciente implements Serializable{
	private static final long serialVersionUID = -581363917187322359L;
	
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    @Column(name = "id", nullable = false, unique = true)
	private long id; 
	
	private String nome;
	
	private String data_admissao;
	
	private String hora_admissao;
	
	private String procedencia;
	
	private String condicoes_transporte;
	
	private String dn;
	
	private String hora_diagnostico;
	
	private String sexo;
	
	private String tipo_parto;
	
	private String apgar1;
	
	private String apgar5;
	
	private String idade_gestacional;
	
	private String tipo_sanguineo;
	
	private String observacoes;
	
	private String peso;
	
	private String estatura;
	
	private String pc;
	
	private String pt;
	
	private String pa1;
	
	private String motivo_internamento;
	
	private String temp_incub;
	
	private String temp_axilar;
	
	private String pressao;
	
	private String fc;
	
	private String fr;
	
	private String pa2;
	
	@Transient
	private Leito leito;
	
	@OneToOne(fetch = FetchType.LAZY, mappedBy = "paciente", cascade = CascadeType.ALL)
	private PacienteSintoma pacienteSintoma;
	
	@OneToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "tb_paciente_diagnostico", joinColumns = { @JoinColumn(name = "id_paciente") }, inverseJoinColumns = { @JoinColumn(name = "id_diagnostico") })
	private List<Diagnostico> listaDiagnosticos;
	
	@OneToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "tb_paciente_intervencoes", joinColumns = { @JoinColumn(name = "id_paciente") }, inverseJoinColumns = { @JoinColumn(name = "id_intervencoes") })
	private List<Intervencao> listaIntervencoes;
	
	public Paciente() {
		pacienteSintoma = new PacienteSintoma();
		leito = new Leito();
		listaIntervencoes = new ArrayList<Intervencao>();
		listaDiagnosticos = new ArrayList<Diagnostico>();
	}
	
	// GETTERS AND SETTERS

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getData_admissao() {
		return data_admissao;
	}

	public void setData_admissao(String data_admissao) {
		this.data_admissao = data_admissao;
	}

	public String getHora_admissao() {
		return hora_admissao;
	}

	public void setHora_admissao(String hora_admissao) {
		this.hora_admissao = hora_admissao;
	}

	public String getProcedencia() {
		return procedencia;
	}

	public void setProcedencia(String procedencia) {
		this.procedencia = procedencia;
	}

	public String getCondicoes_transporte() {
		return condicoes_transporte;
	}

	public void setCondicoes_transporte(String condicoes_transporte) {
		this.condicoes_transporte = condicoes_transporte;
	}

	public String getDn() {
		return dn;
	}

	public void setDn(String dn) {
		this.dn = dn;
	}

	public String getHora_diagnostico() {
		return hora_diagnostico;
	}

	public void setHora_diagnostico(String hora_diagnostico) {
		this.hora_diagnostico = hora_diagnostico;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getTipo_parto() {
		return tipo_parto;
	}

	public void setTipo_parto(String tipo_parto) {
		this.tipo_parto = tipo_parto;
	}

	public String getApgar1() {
		return apgar1;
	}

	public void setApgar1(String apgar1) {
		this.apgar1 = apgar1;
	}

	public String getApgar5() {
		return apgar5;
	}

	public void setApgar5(String apgar5) {
		this.apgar5 = apgar5;
	}

	public String getIdade_gestacional() {
		return idade_gestacional;
	}

	public void setIdade_gestacional(String idade_gestacional) {
		this.idade_gestacional = idade_gestacional;
	}

	public String getTipo_sanguineo() {
		return tipo_sanguineo;
	}

	public void setTipo_sanguineo(String tipo_sanguineo) {
		this.tipo_sanguineo = tipo_sanguineo;
	}

	public String getObservacoes() {
		return observacoes;
	}

	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	public String getPeso() {
		return peso;
	}

	public void setPeso(String peso) {
		this.peso = peso;
	}

	public String getEstatura() {
		return estatura;
	}

	public void setEstatura(String estatura) {
		this.estatura = estatura;
	}

	public String getPc() {
		return pc;
	}

	public void setPc(String pc) {
		this.pc = pc;
	}

	public String getPt() {
		return pt;
	}

	public void setPt(String pt) {
		this.pt = pt;
	}

	public String getPa1() {
		return pa1;
	}

	public void setPa1(String pa1) {
		this.pa1 = pa1;
	}

	public String getMotivo_internamento() {
		return motivo_internamento;
	}

	public void setMotivo_internamento(String motivo_internamento) {
		this.motivo_internamento = motivo_internamento;
	}

	public String getTemp_incub() {
		return temp_incub;
	}

	public void setTemp_incub(String temp_incub) {
		this.temp_incub = temp_incub;
	}

	public String getTemp_axilar() {
		return temp_axilar;
	}

	public void setTemp_axilar(String temp_axilar) {
		this.temp_axilar = temp_axilar;
	}

	public String getPressao() {
		return pressao;
	}

	public void setPressao(String pressao) {
		this.pressao = pressao;
	}

	public String getFc() {
		return fc;
	}

	public void setFc(String fc) {
		this.fc = fc;
	}

	public String getFr() {
		return fr;
	}

	public void setFr(String fr) {
		this.fr = fr;
	}

	public String getPa2() {
		return pa2;
	}

	public void setPa2(String pa2) {
		this.pa2 = pa2;
	}
	
	public PacienteSintoma getPacienteSintoma() {
		return pacienteSintoma;
	}

	public void setPacienteSintoma(PacienteSintoma pacienteSintoma) {
		this.pacienteSintoma = pacienteSintoma;
	}

	public Leito getLeito() {
		return leito;
	}

	public void setLeito(Leito leito) {
		this.leito = leito;
	}

	public List<Diagnostico> getListaDiagnosticos() {
		return listaDiagnosticos;
	}

	public void setListaDiagnosticos(List<Diagnostico> listaDiagnosticos) {
		this.listaDiagnosticos = listaDiagnosticos;
	}

	public List<Intervencao> getListaIntervencoes() {
		return listaIntervencoes;
	}

	public void setListaIntervencoes(List<Intervencao> listaIntervencoes) {
		this.listaIntervencoes = listaIntervencoes;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Paciente other = (Paciente) obj;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		return true;
	}
}
